/**
 * Created by iwang on 2017/1/15.
 */
//express使用的是@4版本的。
var express = require('express');
var session = require('express-session');
//读取文件编码
var iconv=require("iconv-lite");
var xlsx2json=require('node-xlsx');
//form表单需要的中间件。
var mutipart= require('connect-multiparty');
var fs=require('fs');
var mutipartMiddeware = mutipart();
var router = express.Router();
//设置session
router.use(session({
    secret:'weird sheep',
    resave:false,
    saveUninitialized:true,
    cookie:{user:'default',maxAge:14*24*60*100}
}));
//下面会修改临时文件的储存位置，如过没有会默认储存别的地方，这里不在详细描述,这个修改临时文件储存的位置 我在百度里查找了三四个小时才找到这个方法，不得不说nodejs真难学。
//所以在这里留下我的学习记录，以备以后翻阅。
router.use(mutipart({uploadDir:'./upload'}));

//这里用来玩，express框架路由功能写的，与上传文件没没有关系。
router.get('/about',function (req,res) {
    res.type('text/plain');
    res.send('Travel about');
});
//这里就是接受form表单请求的接口路径，请求方式为post。
var router1 = router.post('/upload',mutipartMiddeware,function (req, res) {
    //这里打印可以看到接收到文件的信息。

    console.log(req.files);
    //console.log(req.files.userData.path);
    //console.log(req.files.userData.name);
    console.log(req.files.file.originalFilename);
    var path=req.files.file.path;
    /*//do something
    * 成功接受到浏览器传来的文件。我们可以在这里写对文件的一系列操作。例如重命名，修改文件储存路径 。等等。
    *
    *
    * */

    //给浏览器返回一个成功提示。

    //解码编码
    var data=fs.readFileSync(path,{encoding:'binary'});
    data=new Buffer.from(data,'binary');
    data=iconv.decode(data,'GBK');
    //console.log(data);

    //csv解析成json
    var list = data.split('\n');
    var dist=[];
    for(var i in list){
        dist.push(list[i].split(','));
    }
    var dict={};
    //第一次遍历初始化表头字典
    for(var i in dist[0]){
        dict[dist[0][i]]=[];
    }
    //第二次遍历添加数据内容
    for (var row=1;row<dist.length;row++){
        for(var col in dist[row] ){
            dict[dist[0][col]].push(dist[row][col]);
        }
    }
    console.log(dict);
    //文件路径存到session
    req.session.dataPath=path;
    //文件名存到session
    //req.session.fileName=req.files.file.originalFilename;
    ///res.send(dict);
    // res.writeHead(200,{'Content-Type':'text-plain'});
    // res.render('/views/showData.html',dict);
    res.send(JSON.stringify({"fileName":req.files.file.originalFilename}));
    // res.send('upload success!');
});
//解析csv数据
function parseCSV(name){
    //解码编码
    var data=fs.readFileSync(name,{encoding:'binary'});
    data=new Buffer.from(data,'binary');
    data=iconv.decode(data,'GBK');
    //console.log(data);

    //csv解析成json
    var list = data.split('\n');
    var dist=[];
    for(var i in list){
        dist.push(list[i].split(','));
    }
    var dict={};
    //第一次遍历初始化表头字典
    for(var i in dist[0]){
        dict[dist[0][i]]=[];
    }
    //第二次遍历添加数据内容
    for (var row=1;row<dist.length;row++){
        for(var col in dist[row] ){
            dict[dist[0][col]].push(dist[row][col]);
        }
    }
    return dict
}
//读取上传的数据
router.get('/readData',function (req,res,next) {
    console.log('正在访问数据');
    var path=req.session.dataPath;
    var dict=parseCSV(path);

    //res.writeHead(200,{"Content-Type":'text/plain','charset':'utf-8','Access-Control-Allow-Origin':'*','Access-Control-Allow-Methods':'PUT,POST,GET,DELETE,OPTIONS'});
    res.writeHead(200,{'Access-Control-Allow-Origin':'*'});
    res.write(JSON.stringify(dict));
    res.end();
});
//读取所上传的数据字段
router.get('readKey',function (req,res) {
    var path=req.session.dataPath;
    var dict=parseCSV(path);
    res.writeHead(200,{'Access-Control-Allow-Origin':'*'});
    res.write(JSON.stringify(dict));
    res.end();
});
module.exports = router;